#include<bits/stdc++.h>
#define ll long long
using namespace std;

const int N=1005;
int n,m,l,a,b,c,d;
bool mp[N][N];
#define pb emplace_back
vector<pair<int,int>> e[N];
int h(int x,int y){return (x-1)*m+y;}
void add(int x,int y,int v){
	// cerr<<x<<' '<<y<<' '<<v<<endl;
	e[x].pb(y,v),e[y].pb(x,v);
}
void add1(int x,int y,int v){
	// cerr<<x<<' '<<y<<' '<<v<<endl;
	e[x].pb(y,v);
}
#define fi first
#define se second
// bool cmp(pair<int,int> x,pair<int,int> y){return x.se<y.se;}
bool vis[N];int dis[N];
void bfs(){
	memset(dis,0x0f,sizeof(dis));
	deque<int> q;
	q.push_front(h(a,b));dis[h(a,b)]=0;
	// for(int i=1;i<=n*m;i++) sort(e[i].begin(),e[i].end(),cmp);
	while(!q.empty()){
		int x=q.front();q.pop_front();
		if(vis[x]) continue;vis[x]=1;
		cerr<<x<<endl;
		for(auto p:e[x]){
			if(vis[p.fi]) continue;
			if(dis[p.fi]>dis[x]+p.se){
				dis[p.fi]=dis[x]+p.se;
				if(p.se) q.push_back(p.fi);else q.push_front(p.fi);
			}
		}
	}
}
int main(){
	freopen("stamp.in","r",stdin);
	freopen("stamp.out","w",stdout);
	cin.tie(nullptr)->sync_with_stdio(false);
	int i,j,u,v;
	cin>>n>>m>>l>>a>>b>>c>>d;
	char ch;for(i=1;i<=n;i++) for(j=1;j<=m;j++) cin>>ch,mp[i][j]=(ch=='.');
	for(i=1;i<=n;i++) for(j=1;j<=m;j++) for(u=1;u<=n;u++) for(v=1;v<=m;v++){
		if(i==u&&j==v) continue;
		if(abs(i-u)<=l&&abs(j-v)<=l&&abs(i-u)+abs(j-v)<=2*l-1) add(h(i,j),h(u,v),1);
	}
	for(i=1;i<=n;i++) for(j=1;j<m;j++){
		if(mp[i][j+1]) add1(h(i,j),h(i,j+1),0);
		if(mp[i][j]) add1(h(i,j+1),h(i,j),0);
	}
	for(i=1;i<n;i++) for(j=1;j<=m;j++){
		if(mp[i+1][j]) add1(h(i,j),h(i+1,j),0);
		if(mp[i][j]) add1(h(i+1,j),h(i,j),0);
	}
	bfs();
	cout<<dis[h(c,d)]<<'\n';
	return 0;
}